package main

import "fmt"

/*
*
channel 与select
单线程下go只能监控一个channel的状态 select 可以监控多个channel的状态
*/
func fibonacii(c, quit chan int) {

	x, y := 1, 1

	for {
		select {
		case c <- x:
			//如果c可写 则会进入该case
			x = y
			y = x + y
		case <-quit:
			//如果quit可读 则会进入该case
			fmt.Printf("quit case")
			return
		}
	}

}

func main() {
	c := make(chan int)
	quit := make(chan int)

	go func() {
		for i := 0; i < 20; i++ {
			//获取c中的数据
			fmt.Println(<-c)
		}
		//代表结束
		quit <- 0
	}()
	//main go
	// 管道传入的是引用
	fibonacii(c, quit)
}
